--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_interface_editor.py c0b0ddffd735a0d007c1be9a5e8563ec42fdafc0 (c0b0ddff) Text, 6.03 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787interface_editor Tff7b72import Te6edf3InterfaceEditor
Tff7b72def Td2a8fftest_update_value_addTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3details Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffTCPClientInterfaceTa5d6ff"Tb4b4b4}
Te6edf3InterfaceEditorTff7b72.Td2a8ffupdate_valueTb4b4b4(Te6edf3detailsTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff1.2.3.4Ta5d6ff"Tb4b4b4}Tb4b4b4, Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3detailsTb4b4b4[Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff1.2.3.4Ta5d6ff"
Tff7b72def Td2a8fftest_update_value_updateTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3details Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff1.2.3.4Ta5d6ff"Tb4b4b4}
Te6edf3InterfaceEditorTff7b72.Td2a8ffupdate_valueTb4b4b4(Te6edf3detailsTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff8.8.8.8Ta5d6ff"Tb4b4b4}Tb4b4b4, Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3detailsTb4b4b4[Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff8.8.8.8Ta5d6ff"
Tff7b72def Td2a8fftest_update_value_remove_on_noneTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3details Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff1.2.3.4Ta5d6ff"Tb4b4b4}
Te6edf3InterfaceEditorTff7b72.Td2a8ffupdate_valueTb4b4b4(Te6edf3detailsTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4}Tb4b4b4, Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffhostTa5d6ff" Tff7b72not Tff7b72in Te6edf3details
Tff7b72def Td2a8fftest_update_value_remove_on_empty_stringTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3details Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff1.2.3.4Ta5d6ff"Tb4b4b4}
Te6edf3InterfaceEditorTff7b72.Td2a8ffupdate_valueTb4b4b4(Te6edf3detailsTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff"Tb4b4b4}Tb4b4b4, Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffhostTa5d6ff" Tff7b72not Tff7b72in Te6edf3details
Tff7b72def Td2a8fftest_coerce_rnode_frequency_hz_integer_hzTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffcoerce_rnode_frequency_hzTb4b4b4(T79c0ff868825000Tb4b4b4) Tff7b72== T79c0ff868825000
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffcoerce_rnode_frequency_hzTb4b4b4(Ta5d6ff"Ta5d6ff868825000Ta5d6ff"Tb4b4b4) Tff7b72== T79c0ff868825000
Tff7b72def Td2a8fftest_coerce_rnode_frequency_hz_mhz_decimalTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffcoerce_rnode_frequency_hzTb4b4b4(T79c0ff868.825Tb4b4b4) Tff7b72== T79c0ff868825000
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffcoerce_rnode_frequency_hzTb4b4b4(Ta5d6ff"Ta5d6ff868.825000000Ta5d6ff"Tb4b4b4) Tff7b72== T79c0ff868825000
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffcoerce_rnode_frequency_hzTb4b4b4(Ta5d6ff"Ta5d6ff868.825000000 MHzTa5d6ff"Tb4b4b4) Tff7b72== T79c0ff868825000
Tff7b72def Td2a8fftest_coerce_rnode_frequency_hz_integer_mhzTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffcoerce_rnode_frequency_hzTb4b4b4(T79c0ff868Tb4b4b4) Tff7b72== T79c0ff868000000
Tff7b72def Td2a8fftest_coerce_rnode_frequency_hz_leaves_midrange_hzTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffcoerce_rnode_frequency_hzTb4b4b4(T79c0ff125000Tb4b4b4) Tff7b72== T79c0ff125000
Tff7b72def Td2a8fftest_normalize_rnode_txpower_integerTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_rnode_txpowerTb4b4b4(T79c0ff7Tb4b4b4) Tff7b72== T79c0ff7
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_rnode_txpowerTb4b4b4(Ta5d6ff"Ta5d6ff14Ta5d6ff"Tb4b4b4) Tff7b72== T79c0ff14
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_rnode_txpowerTb4b4b4(Ta5d6ff"Ta5d6ff7.0Ta5d6ff"Tb4b4b4) Tff7b72== T79c0ff7
Tff7b72def Td2a8fftest_validate_rnode_txpower_accepts_reticulum_rangeTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_rnode_txpowerTb4b4b4(T79c0ff0Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_rnode_txpowerTb4b4b4(T79c0ff22Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_rnode_txpowerTb4b4b4(T79c0ff37Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_validate_rnode_txpower_rejects_out_of_rangeTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_rnode_txpowerTb4b4b4(Tff7b72-T79c0ff9Tb4b4b4) Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_rnode_txpowerTb4b4b4(T79c0ff38Tb4b4b4) Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_rnode_txpowerTb4b4b4(Ta5d6ff"Ta5d6ffbadTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_rnode_txpowerTb4b4b4(Tff7b72NoneTb4b4b4) Tff7b72is Tff7b72not Tff7b72None
Tff7b72def Td2a8fftest_normalize_rnode_tcp_port_host_onlyTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Tb4b4b4(
Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_rnode_tcp_portTb4b4b4(Ta5d6ff"Ta5d6fftcp://10.0.0.5Ta5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6fftcp://10.0.0.5Ta5d6ff"
Tb4b4b4)
Tff7b72def Td2a8fftest_normalize_rnode_tcp_port_strips_legacy_ipv4_portTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Tb4b4b4(
Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_rnode_tcp_portTb4b4b4(Ta5d6ff"Ta5d6fftcp://10.0.0.5:7633Ta5d6ff"Tb4b4b4)
Tff7b72== Ta5d6ff"Ta5d6fftcp://10.0.0.5Ta5d6ff"
Tb4b4b4)
Tff7b72def Td2a8fftest_normalize_rnode_tcp_port_strips_trailing_colonsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Tb4b4b4(
Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_rnode_tcp_portTb4b4b4(Ta5d6ff"Ta5d6fftcp://10.0.0.5:Ta5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6fftcp://10.0.0.5Ta5d6ff"
Tb4b4b4)
Tff7b72def Td2a8fftest_normalize_rnode_tcp_port_bracket_ipv6_with_portTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Tb4b4b4(
Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_rnode_tcp_portTb4b4b4(Ta5d6ff"Ta5d6fftcp://[2001:db8::1]:7633Ta5d6ff"Tb4b4b4)
Tff7b72== Ta5d6ff"Ta5d6fftcp://[2001:db8::1]Ta5d6ff"
Tb4b4b4)
Tff7b72def Td2a8fftest_normalize_rnode_tcp_port_non_tcp_unchangedTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_rnode_tcp_portTb4b4b4(Ta5d6ff"Ta5d6ff/dev/ttyUSB0Ta5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ff/dev/ttyUSB0Ta5d6ff"
Tff7b72def Td2a8fftest_normalize_interface_mode_aliasesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_interface_modeTb4b4b4(Ta5d6ff"Ta5d6ffinternalTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffinternalTa5d6ff"
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_interface_modeTb4b4b4(Ta5d6ff"Ta5d6ffGWTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_interface_modeTb4b4b4(Ta5d6ff"Ta5d6ffapTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffaccess_pointTa5d6ff"
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_interface_modeTb4b4b4(Ta5d6ff"Ta5d6ffevilTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffnormalize_interface_modeTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_apply_interface_mode_rejects_unknownTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3details Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3err Tff7b72= Te6edf3InterfaceEditorTff7b72.Td2a8ffapply_interface_modeTb4b4b4(Te6edf3detailsTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffnot-a-modeTa5d6ff"Tb4b4b4}Tb4b4b4)
Tff7b72assert Te6edf3err Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Ta5d6ff"Ta5d6ffmodeTa5d6ff" Tff7b72not Tff7b72in Te6edf3details
Tff7b72def Td2a8fftest_apply_interface_mode_canonicalizesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3details Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffapply_interface_modeTb4b4b4(Te6edf3detailsTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffinternalTa5d6ff"Tb4b4b4}Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3detailsTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffinternalTa5d6ff"
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffapply_interface_modeTb4b4b4(Te6edf3detailsTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffgwTa5d6ff"Tb4b4b4}Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3detailsTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffgatewayTa5d6ff"
Tff7b72def Td2a8fftest_apply_yes_no_option_recursive_prsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3details Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72assert Tb4b4b4(
Te6edf3InterfaceEditorTff7b72.Td2a8ffapply_yes_no_optionTb4b4b4(
Te6edf3detailsTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffrecursive_prsTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4}Tb4b4b4, Ta5d6ff"Ta5d6ffrecursive_prsTa5d6ff"
Tb4b4b4)
Tff7b72is Tff7b72None
Tb4b4b4)
Tff7b72assert Te6edf3detailsTb4b4b4[Ta5d6ff"Ta5d6ffrecursive_prsTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72assert Tb4b4b4(
Te6edf3InterfaceEditorTff7b72.Td2a8ffapply_yes_no_optionTb4b4b4(
Te6edf3detailsTb4b4b4,
Tb4b4b4{Ta5d6ff"Ta5d6ffannounces_from_internalTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffannounces_from_internalTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72is Tff7b72None
Tb4b4b4)
Tff7b72assert Te6edf3detailsTb4b4b4[Ta5d6ff"Ta5d6ffannounces_from_internalTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffnoTa5d6ff"
Tff7b72def Td2a8fftest_validate_location_cmd_rejects_shell_metacharactersTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_location_cmdTb4b4b4(Ta5d6ff"Ta5d6ff/usr/bin/trueTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_location_cmdTb4b4b4(Ta5d6ff"Ta5d6ff~/bin/gps.shTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_location_cmdTb4b4b4(Ta5d6ff"Ta5d6ffrelative/pathTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_location_cmdTb4b4b4(Ta5d6ff"Ta5d6ff/tmp/evil;rm -rf /Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_location_cmdTb4b4b4(Ta5d6ff"Ta5d6ff/tmp/$(id)Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffvalidate_location_cmdTb4b4b4(Ta5d6ff"Ta5d6ff/tmp/../etc/passwdTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72None
Tff7b72def Td2a8fftest_apply_location_cmd_normalizes_homeTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3details Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3err Tff7b72= Te6edf3InterfaceEditorTff7b72.Td2a8ffapply_location_cmdTb4b4b4(Te6edf3detailsTb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6fflocation_cmdTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff~/gps-locTa5d6ff"Tb4b4b4}Tb4b4b4)
Tff7b72assert Te6edf3err Tff7b72is Tff7b72None
Tff7b72assert Te6edf3detailsTb4b4b4[Ta5d6ff"Ta5d6fflocation_cmdTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ffgps-locTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3detailsTb4b4b4[Ta5d6ff"Ta5d6fflocation_cmdTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_sanitize_imported_rns_options_rejects_bad_modeTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3body Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffwarehouseTa5d6ff"Tb4b4b4}
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffsanitize_imported_rns_optionsTb4b4b4(Te6edf3bodyTb4b4b4) Tff7b72is Tff7b72not Tff7b72None
Tff7b72def Td2a8fftest_sanitize_imported_rns_options_accepts_internalTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3body Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffinternalTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffrecursive_prsTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffyesTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffannounces_from_internalTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffnoTa5d6ff"Tb4b4b4,
Tb4b4b4}
Tff7b72assert Te6edf3InterfaceEditorTff7b72.Td2a8ffsanitize_imported_rns_optionsTb4b4b4(Te6edf3bodyTb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3bodyTb4b4b4[Ta5d6ff"Ta5d6ffmodeTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffinternalTa5d6ff"
Tff7b72assert Te6edf3bodyTb4b4b4[Ta5d6ff"Ta5d6ffrecursive_prsTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffyesTa5d6ff"
Tff7b72assert Te6edf3bodyTb4b4b4[Ta5d6ff"Ta5d6ffannounces_from_internalTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffnoTa5d6ff"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────